/**
 * File: compraHeaderMB.java
 * Data: 05.01.2011
 * Objective: Criar a classe managed bean da entidade que representa o Header da Compra.
 *
 * Copyright 2011 S2DZ CORPORATION
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package mbeans;

import controller.CompraHeaderController;
import controller.ControllerUtil;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import modelo.CompraHeaderModelo;

/**
 * Managed Bean da entidade que representa o Fornecedor.
 * @author Paulo Ilenga
 */
@ManagedBean(name = "compraHeaderDocMB")
@SessionScoped
public class CompraHeaderDocMB implements Serializable
{

    private CompraHeaderController controller;
    private CompraHeaderModelo modelo, modeloTemp;
    private CompraHeaderModelo[] seleccionados;
    private FacesContext context;
    private Date date;
    private GregorianCalendar gc;

    /** Constructor da classe sem argumentos */
    public CompraHeaderDocMB()
    {
        controller = new CompraHeaderController();
        modelo = new CompraHeaderModelo();
        modeloTemp = new CompraHeaderModelo();
        gc= new GregorianCalendar();
    }

//------------------------inicio dos Métodos set e get---------------------------------
    public CompraHeaderController getController()
    {
        return controller;
    }

    public void setController(CompraHeaderController controller)
    {
        this.controller = controller;
    }

    public CompraHeaderModelo getModelo() throws SQLException
    {
        modelo.setNumDoc("CMP" + ControllerUtil.getMaxId("tbl_compra_header") + "/" + gc.get(GregorianCalendar.YEAR));
        modelo.setDataRegisto(new Date());

        return modelo;
    }

    public void setModelo(CompraHeaderModelo modelo)
    {
        this.modelo = modelo;
    }

    public CompraHeaderModelo getModeloTemp()
    {
        return modeloTemp;
    }

    public void setModeloTemp(CompraHeaderModelo modeloTemp)
    {
        this.modeloTemp = modeloTemp;
    }

    public List<CompraHeaderModelo> getTodos()
    {
    return controller.getTodosComLigacao();
    }
    public CompraHeaderModelo[] getSeleccionados()
    {
        return seleccionados;
    }

    public void setSeleccionados(CompraHeaderModelo[] seleccionados)
    {
        this.seleccionados = seleccionados;
    }

    //-----------------------fim dos métodos set e get------------------------------
    /**
     * Método salvar da classe
     */
    public void salvar()
    {
        context = FacesContext.getCurrentInstance();


        if (!modelo.getNumDoc().equals(""))
        {
            if (modelo.getIdFornecedor() != 0)
            {
                if (!modelo.getMoeda().equals(""))
                {
                    if (modelo.getTaxaCambio() != 0)
                    {
                        if (!modelo.getFormaPagamento().equals(""))
                        {
                            if (controller.save(modelo))
                            {
                                modelo = new CompraHeaderModelo();
                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "GCBoutique", "Registo Guardado Com Sucesso!"));
                            } else
                            {
                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "GCBoutique", "Erro N.º SG001: Ao Guardar o Registo! Consulte o Suporte"));
                            }
                        } else
                        {
                            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar a Forma de Pagamento!"));
                        }

                    } else
                    {
                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Taxa de Câmbio!"));
                    }
                } else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Moeda"));
                }

            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar o Funcionario"));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Num Doc!"));
        }

        //System.err.println("Nome: " + modelo.getNome());
    }

    /**
     * Método que actualiza os dados do registo.
     * @param o evento gerado pela página.
     */
    public void actulizar(ActionEvent event)
    {
        context = FacesContext.getCurrentInstance();

        if (!modelo.getNumDoc().equals(""))
        {
            if (modelo.getIdFornecedor() != 0)
            {
                if (!modelo.getMoeda().equals(""))
                {
                    if (modelo.getTaxaCambio() != 0)
                    {
                        if (!modelo.getFormaPagamento().equals(""))
                        {
                            if (controller.update(modelo))
                            {
                                modelo = new CompraHeaderModelo();
                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "GCBoutique", "Registo Actualizado Com Sucesso!"));
                            } else
                            {
                                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "GCBoutique", "Erro N.º SG001: Ao Actualizar o Registo! Consulte o Suporte"));
                            }
                        } else
                        {
                            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar a Forma de Pagamento!"));
                        }

                    } else
                    {
                        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Taxa de Câmbio!"));
                    }
                } else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar a Moeda"));
                }

            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Seleccionar o Funcionario"));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Aviso N.º UG002: Deve Digitar o Num Doc!"));
        }
    }

    /**
     * Método que elimina os dados do registo.
     * @param o evento gerado pela página.
     */
    public void eliminar(ActionEvent event)
    {
        context = FacesContext.getCurrentInstance();


        if (modeloTemp.getId() != 0)
        {
            if (controller.eliminar(modeloTemp.getId(), "tbl_compra_header"))
            {
                modeloTemp = new CompraHeaderModelo();
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "GCBoutique", "Registo Eliminado Com Sucesso!"));
            }

        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "GCBoutique", "Erro Aviso N.º UE001: Deve Seleccionar um registo."));
        }
    }

    /**
     * Métodos que cria uma nova instância do objecto modelo.
     */
    public void novoModelo(ActionEvent event)
    {
        modeloTemp = new CompraHeaderModelo();
    }
}
